package com.example.dao;

import com.example.model.BookInfo;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 图书数据访问层
 * 职责：负责图书数据的访问操作
 * 数据访问层隐藏了数据存储的细节，上层无需关心数据来源
 */
public class BookDao {

    /**
     * 模拟数据获取方法
     * 在实际项目中，这里会连接数据库执行SQL查询
     * 当前使用模拟数据演示分层架构
     *
     * @return 模拟的图书数据列表
     */
    public List<BookInfo> mockData() {
        // 创建ArrayList存储图书信息
        // 使用泛型确保类型安全，只能存储BookInfo对象
        List<BookInfo> books = new ArrayList<>();

        // 生成5条模拟数据
        // 在实际项目中，这里会是数据库查询结果
        for (int i = 0; i < 5; i++) {
            // 创建图书对象，使用默认构造函数
            BookInfo book = new BookInfo();

            // 设置图书ID，使用循环变量i作为ID
            book.setId(i);

            // 设置图书名称，拼接字符串生成有意义的书名
            book.setBookName("书籍" + i);

            // 设置作者名称
            book.setAuthor("作者" + i);

            // 设置图书库存数量
            // 使用简单算法生成模拟数据：i*5+3
            book.setCount(i * 5 + 3);

            // 设置图书价格
            // 使用BigDecimal避免浮点数精度问题，生成0-99的随机价格
            book.setPrice(new BigDecimal(new Random().nextInt(100)));

            // 设置出版社信息
            book.setPublish("出版社" + i);

            // 设置图书状态，1表示可借阅
            book.setStatus(1);

            // 将图书对象添加到列表
            books.add(book);
        }

        // 返回数据列表
        // 在实际项目中，这里返回的是从数据库查询的真实数据
        return books;
    }
}
